package com.example.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.CommentInfo;
import com.example.entity.PermissionInfo;
import com.example.mapper.CommentMapper;
import com.example.mapper.PermissionMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 评论服务类
 * 提供评论数据的查询和树形结构构建功能
 */
@Service
public class CommentService extends ServiceImpl<CommentMapper, CommentInfo> {


    @Resource
    private CommentMapper commentMapper;

    /**
     * 查询所有评论列表并构建树形结构
     * @return 返回构建好树形结构的评论列表
     */
    public List<CommentInfo> selectCommentList() {
        List<CommentInfo> commentInfos = commentMapper.selectList(null);
        return selectCommentList(commentInfos);
    }

    /**
     * 将评论列表构建成树形结构
     * @param commentInfos 评论信息列表
     * @return 返回构建好树形结构的评论列表
     */
    public List<CommentInfo> selectCommentList(List<CommentInfo> commentInfos) {
        return getCommentTree(null, commentInfos);
    }

    /**
     * 递归构建评论树形结构
     * @param id 当前节点的父级ID，null表示顶级节点
     * @param commentInfos 所有评论信息列表
     * @return 返回当前节点下的子评论树形结构
     */
    private List<CommentInfo> getCommentTree(Integer id, List<CommentInfo> commentInfos) {
        List<CommentInfo> list = new ArrayList<>();
        // 遍历所有评论，找出指定父ID的子评论
        for (CommentInfo commentInfo : commentInfos) {
            if(Objects.equals(commentInfo.getPid(), id)){
                // 递归获取当前评论的子评论树
                List<CommentInfo> commentTree = getCommentTree(commentInfo.getId(), commentInfos);
                commentInfo.setChildren(commentTree);
                list.add(commentInfo);
            }
        }
        // 按ID倒序排列评论
        return list.stream().sorted(Comparator.comparing(CommentInfo::getId).reversed()).collect(Collectors.toList());
    }
}

